Neste módulo pretende-se fazer uma análise estatística preliminar dos dados da taxa de desemprego. Os dados utilizados são obtidos através do package eurostat do R e dizem respeito às taxas de desemprego de um conjunto de países, maioritariamente da União Europeia, entre 1983 e 2019.
O objetivo é compreender a distribuição dos dados a partir de uma análise exploratória de forma a tentar responder às seguintes questões:
O primeiro passo é naturalmente a leitura dos dados e a visualização.
Um sumário de cada uma das variáveis também pode ser um passo importante. Fornece informação imediata sobre as medidas de localização e dispersão, como a média, desvio-padrão e quartis.
# carregar a biblioteca 'tidyverse'
library(tidyverse)
# carregar os dados eurostat
load("dados_eurostat.Rdata")
# View(dados_eurostat)
# visualizar primeiras 6 linhas
head(dados_eurostat)## # A tibble: 6 x 13
## country time year cod Females Males Over25_F Over25_M Over25 Total
## <fct> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Finland 1988 1988 Finla 4.1 5.4 2.9 4.2 3.6 4.8
## 2 Finland 1988. 1988 Finla 4 5.1 2.8 3.9 3.4 4.6
## 3 Finland 1988. 1988 Finla 3.9 4.9 2.8 3.7 3.2 4.5
## 4 Finland 1988. 1988 Finla 3.9 4.8 2.7 3.6 3.2 4.4
## 5 Finland 1988. 1988 Finla 3.9 4.8 2.7 3.6 3.2 4.3
## 6 Finland 1988. 1988 Finla 3.8 4.7 2.7 3.6 3.1 4.3
## # … with 3 more variables: Under25_F <dbl>, Under25_M <dbl>, Under25 <dbl>
## [1] 10850 13
## Classes 'tbl_df', 'tbl' and 'data.frame': 10850 obs. of 13 variables:
## $ country : Factor w/ 38 levels "Finland","Ireland",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ time : num 1988 1988 1988 1988 1988 ...
## $ year : num 1988 1988 1988 1988 1988 ...
## $ cod : Factor w/ 33 levels "Austr","Belgi",..: 9 9 9 9 9 9 9 9 9 9 ...
## $ Females : num 4.1 4 3.9 3.9 3.9 3.8 3.8 3.7 3.6 3.6 ...
## $ Males : num 5.4 5.1 4.9 4.8 4.8 4.7 4.5 4.3 4.2 4.1 ...
## $ Over25_F : num 2.9 2.8 2.8 2.7 2.7 2.7 2.6 2.5 2.5 2.4 ...
## $ Over25_M : num 4.2 3.9 3.7 3.6 3.6 3.6 3.4 3.2 3.1 3 ...
## $ Over25 : num 3.6 3.4 3.2 3.2 3.2 3.1 3 2.9 2.8 2.7 ...
## $ Total : num 4.8 4.6 4.5 4.4 4.3 4.3 4.1 4 3.9 3.8 ...
## $ Under25_F: num 10.7 10.6 10.6 10.5 10.4 10.3 10.2 10.1 10.1 9.9 ...
## $ Under25_M: num 12.2 12.1 11.9 11.7 11.5 11.2 10.8 10.6 10.5 10.4 ...
## $ Under25 : num 11.5 11.4 11.3 11.1 11 10.7 10.5 10.4 10.3 10.2 ...
## country time year cod
## Ireland : 435 Min. :1983 Min. :1983 Irela : 435
## Netherlands: 435 1st Qu.:1998 1st Qu.:1997 Nethe : 435
## Sweden : 435 Median :2005 Median :2005 Swede : 435
## Denmark : 434 Mean :2004 Mean :2004 Denma : 434
## France : 434 3rd Qu.:2012 3rd Qu.:2012 Franc : 434
## Japan : 434 Max. :2019 Max. :2019 Italy : 434
## (Other) :8243 (Other):8243
## Females Males Over25_F Over25_M
## Min. : 1.300 Min. : 1.100 Min. : 0.900 Min. : 0.800
## 1st Qu.: 5.300 1st Qu.: 5.000 1st Qu.: 4.600 1st Qu.: 4.100
## Median : 7.600 Median : 6.900 Median : 6.600 Median : 5.700
## Mean : 8.798 Mean : 7.854 Mean : 7.639 Mean : 6.673
## 3rd Qu.:10.900 3rd Qu.: 9.400 3rd Qu.: 9.700 3rd Qu.: 8.300
## Max. :31.900 Max. :26.000 Max. :29.800 Max. :23.600
## NA's :168 NA's :168 NA's :604 NA's :604
## Over25 Total Under25_F Under25_M
## Min. : 1.00 Min. : 1.300 Min. : 2.70 Min. : 2.60
## 1st Qu.: 4.40 1st Qu.: 5.200 1st Qu.:10.50 1st Qu.:11.50
## Median : 6.10 Median : 7.400 Median :17.10 Median :16.80
## Mean : 7.06 Mean : 8.242 Mean :18.74 Mean :18.24
## 3rd Qu.: 8.60 3rd Qu.:10.000 3rd Qu.:23.80 3rd Qu.:22.50
## Max. :25.80 Max. :27.800 Max. :68.80 Max. :57.80
## NA's :436 NA's :619 NA's :619
## Under25
## Min. : 2.70
## 1st Qu.:10.60
## Median :16.60
## Mean :17.97
## 3rd Qu.:22.60
## Max. :60.30
## NA's :13
De forma a responder à questão da simetria e para melhorar a compreensão da distribuição dos dados da variável de interesse, sugere-se um histograma e um boxplot. São apresentadas duas alternativas de sintaxe em cada um dos casos.
# ter sempre atenção à legibilidade das labels dos eixos!
ggplot(dados_eurostat, aes(x = cod, y = Total)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))# boxplot por ano
ggplot(dados_eurostat, aes(x = as.factor(year), y = Total)) +
geom_boxplot() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
# filtrar os dados de Portugal (uso da função which)
dados_eurostat_port <- dados_eurostat[which(dados_eurostat$country == "Portugal"), ]
# OU
# alternativa 'tidyverse'
dados_eurostat_port <- filter(dados_eurostat, country == "Portugal")
head(dados_eurostat_port)## # A tibble: 6 x 13
## country time year cod Females Males Over25_F Over25_M Over25 Total
## <fct> <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Portug… 1983 1983 Portu 12.5 5 7.3 3 4.6 8.1
## 2 Portug… 1983. 1983 Portu 12.6 5.1 7.3 3 4.7 8.1
## 3 Portug… 1983. 1983 Portu 12.8 5.2 7.4 3 4.7 8.3
## 4 Portug… 1983. 1983 Portu 13.2 5.4 7.5 3.1 4.8 8.5
## 5 Portug… 1983. 1983 Portu 13.4 5.6 7.6 3.3 5 8.8
## 6 Portug… 1983. 1983 Portu 13.5 5.9 7.7 3.4 5.1 9
## # … with 3 more variables: Under25_F <dbl>, Under25_M <dbl>, Under25 <dbl>
# evolução dos valores ao longo do tempo
plot(x = dados_eurostat_port$time, y = dados_eurostat_port$Total)# transformar a sequência de pontos numa linha
plot(x = dados_eurostat_port$time,
y = dados_eurostat_port$Total,
xlab = "Time in years",
ylab = "Unemployment rate",
type = "l")# alternativa com pontos (ggplot)
ggplot(data = dados_eurostat_port, aes(x = time, y = Total)) +
geom_point()# gráfico linear (ter sempre atenção às labels dos eixos!)
ggplot(data = dados_eurostat_port, aes(x = time, y = Total)) +
geom_line() +
xlab("Time in years") + ylab("Unemployment rate")
# filtrar os dados de 2019
dados_eurostat_2019 <- filter(dados_eurostat, year == "2019")
# gráfico da taxa de desemprego por país
ggplot(data = dados_eurostat_2019, aes(x = cod, y = Total)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Ao analisar a evolução da taxa de desemprego ao longo dos anos atendendo aos 33 diferentes países é possível usar diferentes metodologias para a visualização do mesmo conjunto de dados.
# taxa de desemprego ao longo do tempo para cada país
ggplot(data = dados_eurostat, aes(x = time, y = Total)) +
geom_point(size = 0.5) +
# geom_smooth(size = 1, se = FALSE) +
facet_wrap( ~ cod) +
theme(axis.text.x = element_text(angle = 90, hjust = 1))# representação alternativa
ggplot(dados_eurostat, aes(cod, Total, color = time)) +
geom_point() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))# E AINDA
# "jitter" para facilitar visualização
ggplot(dados_eurostat, aes(cod, Total, color = time)) +
geom_jitter() +
theme(axis.text.x = element_text(angle = 90, hjust = 1))
Para visualização gráfica da taxa de desemprego nos vários países por grupos (escalão etário e sexo), sugere-se a criação de uma nova variável na tabela com indicação do grupo. Este processo pode ser facilmente feito com recurso à função gather do package tidyverse.
# criação de nova variável grupo
dados_eurostat2 <- gather(dados_eurostat,
key = "group",
"Females",
"Males",
"Over25_F",
"Over25_M",
"Over25",
"Total",
"Under25_F",
"Under25_M",
"Under25",
value = "values")
# 6 primeiras linhas
head(dados_eurostat2)## # A tibble: 6 x 6
## country time year cod group values
## <fct> <dbl> <dbl> <fct> <chr> <dbl>
## 1 Finland 1988 1988 Finla Females 4.1
## 2 Finland 1988. 1988 Finla Females 4
## 3 Finland 1988. 1988 Finla Females 3.9
## 4 Finland 1988. 1988 Finla Females 3.9
## 5 Finland 1988. 1988 Finla Females 3.9
## 6 Finland 1988. 1988 Finla Females 3.8
# filtrar apenas os dados de Portugal
dados_eurostat2_port <- filter(dados_eurostat2, country == "Portugal")
# boxplot por grupo em Portugal (o que difere do gráfico anterior?)
ggplot(dados_eurostat2_port, aes(x = group, y = values)) +
geom_boxplot()
# gráfico da evolução ao longo do tempo, (filtrado unicamente para Portugal!)
ggplot(filter(dados_eurostat, country == "Portugal"), aes(Females, Males, color = time)) +
geom_abline() +
geom_point(size = 2)
# taxa de desemprego por mês para cada grupo, em Portugal
ggplot(data = dados_eurostat2_port, aes(x = time, y = values, color = group)) +
geom_point() +
geom_line()# visualização por grupos separados
ggplot(data = dados_eurostat2_port, aes(x = time, y = values)) +
geom_point(size = 0.5) +
# geom_smooth(size = 1, se = FALSE) +
facet_wrap( ~ group)
# criar a matrix de correlações (atenção aos NAs)
correlation <- cor(dados_eurostat[, c(5:13)], use = "complete.obs")
# calcular matriz com coeficientes de correlação entre as diferentes variáveis quantitativas
CorMatrix <- broom::tidy(correlation) %>% # matriz em tibble
rename(Var1 = ".rownames") %>% # cria variável Var1 para categorias
gather(key = Var2, Cor, -Var1) # seleção das 3 colunas ordenadas
# visualizar a matriz de cprrelações
CorMatrix## # A tibble: 81 x 3
## Var1 Var2 Cor
## <chr> <chr> <dbl>
## 1 Females Females 1
## 2 Males Females 0.821
## 3 Over25_F Females 0.981
## 4 Over25_M Females 0.789
## 5 Over25 Females 0.910
## 6 Total Females 0.943
## 7 Under25_F Females 0.896
## 8 Under25_M Females 0.814
## 9 Under25 Females 0.881
## 10 Females Males 0.821
## # … with 71 more rows
# criar heatmap com valores da correlação entre as diferentes variáveis
ggplot(CorMatrix, aes(Var1, Var2, fill = Cor)) +
geom_tile()